package com.xnyzc.lhy.common.entity;

import com.google.common.collect.Lists;

import java.util.LinkedList;
import java.util.List;

/**
 * @Description:
 * @Author: scootXin
 * @Date: 2019/4/12 14:31
 */
public interface RedisEnum {

    /**
     * 获取枚举组名称
     */
    List<RedisEnum> getGroup();

    /**
     * 获取枚举
     *
     * @return
     */
    Enum getEnum();

    /**
     * 是否持久化
     *
     * @return
     */
    default boolean isPersistence() {
        return true;
    }

    /**
     * 获取过期时间
     *
     * @return
     */
    default int getExpireTime() {
        return -1;
    }

    /**
     * 静态获取key的方法
     *
     * @return
     */
    default String getRedisKey() {
        Enum e = getEnum();

        if (e == null) {
            throw new RuntimeException("enum can't be empty");
        }

        String className = e.getClass().getSimpleName().toLowerCase();
        className = className.replaceAll("redis", "").replaceAll("enum", "");

        return new StringBuilder().append(className).append("-").append(e.name()).toString();
    }

    /**
     * 根据数组获取list
     */
    default List<RedisEnum> getListByArray(RedisEnum... ts) {
        if (ts == null || ts.length == 0) {
            return Lists.newArrayList();
        }

        LinkedList<RedisEnum> l = Lists.newLinkedList();

        for (RedisEnum t : ts) {
            if (t == null) {
                continue;
            }

            l.add(t);
        }

        return l;
    }

}
